package br.com.mftc.efitness.beans;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import br.com.mftc.efitness.basicas.Aluno;
import br.com.mftc.efitness.basicas.Operador;
import br.com.mftc.efitness.basicas.UsuarioDoSistema;
import br.com.mftc.efitness.excecoes.ExcecaoCamposObrigatoriosNaoPreenchidos;
import br.com.mftc.efitness.excecoes.ExcecaoNegocio;

@ManagedBean(name = "login")
@SessionScoped
public class LoginBean {

	@ManagedProperty("#{direcionador}")
	private DirecionadorBean direcionador;
	
	@ManagedProperty("#{mensagens}")
	private MensagensBean mensagens;
	
	@ManagedProperty("#{fachada}")
	private FachadaBean fachada;
	
	private String login, senha;
	private UsuarioDoSistema usuario;

	public String efetuarLogin() {
		try {
			usuario = fachada.efetuarLogin(login, senha);

			login = null;
			senha = null;			
			
			return direcionador.irInicial();
		} catch (ExcecaoCamposObrigatoriosNaoPreenchidos excecao) {
			mensagens.addMensagem(FacesMessage.SEVERITY_WARN, excecao);
			return null;
		} catch (ExcecaoNegocio excecao) {
			mensagens.addMensagem(FacesMessage.SEVERITY_FATAL, excecao);
			return null;
		}	
	}

	public String efetuarLogout() {
		usuario = null;
		return direcionador.irInicial();
	}

	public Boolean loginEfetuado() {
		if (usuario != null) {
			return true;
		} else {
			return false;
		}
	}
	
	public boolean eAluno () {
		if (usuario instanceof Aluno) {
			return true;
		}
		return false;
	}
	
	public boolean eOperador () {
		if (usuario instanceof Operador) {
			return true;
		}
		return false;
	}

	public DirecionadorBean getDirecionador() {
		return direcionador;
	}

	public void setDirecionador(DirecionadorBean direcionador) {
		this.direcionador = direcionador;
	}
	
	public MensagensBean getMensagens() {
		return mensagens;
	}

	public void setMensagens(MensagensBean mensagens) {
		this.mensagens = mensagens;
	}

	public FachadaBean getFachada() {
		return fachada;
	}

	public void setFachada(FachadaBean fachada) {
		this.fachada = fachada;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public UsuarioDoSistema getUsuario() {
		if (eAluno ()) {
			return (Aluno) usuario;
		} else {
			return (Operador) usuario;
		}
	}

	public void setUsuario(UsuarioDoSistema usuario) {
		this.usuario = usuario;
	}
}
